package net.suplementos.dao;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.EntityManager;

import net.suplementos.exception.DAOException;
import net.suplementos.pojo.Categoria;

public class CategoriaDAO extends JPAAbstractDAO<Categoria, Integer> {

	public CategoriaDAO(EntityManager manager) throws DAOException {
	    super(manager);
	}

	protected Class<Categoria> doGetClass() {
		return Categoria.class;
	}
	
	public Categoria getPorTitulo(String titulo) throws DAOException {
		String consulta = "select c from Categoria c where c.titulo = ?";

		List<Categoria> categorias = consultar(consulta, titulo);

		if (categorias == null || categorias.isEmpty()) {
			return null;
		}

		return categorias.get(0);
	}
	
	public List<Categoria> listarTodasAtivas() throws DAOException {
		String consulta = "select c from Categoria c where c.ativo = true";

		return consultar(consulta);
	}
	
	public List<Categoria> consultar(Categoria categoria) throws DAOException {
       	StringBuilder hql = new StringBuilder("select c from Categoria c where 1 = 1 ");
       	List<Object> parametros = new ArrayList<Object>();

    	if (categoria.getId() != null) {
    		hql.append("and c.id = ?");
    		parametros.add(categoria.getId());
    	}
    	if (categoria.getAtivo() != null) {
    		hql.append("and c.ativo = ?");
    		parametros.add(categoria.getAtivo());
    	}
    	if (categoria.getDescricao() != null && !categoria.getDescricao().trim().equals("")) {
    		hql.append("and c.descricao like ?");
    		parametros.add("%" + categoria.getDescricao() + "%");
    	}
    	if (categoria.getTitulo() != null&& !categoria.getTitulo().trim().equals("")) {
    		hql.append("and c.titulo like ?");
    		parametros.add("%" + categoria.getTitulo() + "%");
    	}

    	return consultar(hql.toString(), parametros.toArray(new Object[parametros.size()]));
	}
}
